#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <stdbool.h>
typedef int QUDataType;
//队头在链表的尾节点,队尾在链表的头节点
typedef struct QueueNode
{
    QUDataType data;
    struct QueueNode* next;
}QNode;

typedef struct Queue
{
    QNode* phead;
    QNode* ptail;
    int size;
}Queue;

//队列的初始化
void QueueInit(Queue* pq);
//销毁队列
void QueueDestroy(Queue* pq);
//入队列,队尾
void QueuePush(Queue* pq,QUDataType x);
//队列的判空
bool QueueEmpty(Queue* pq);
//出队列
void QueuePop(Queue* pq);
//取队尾的元素
QUDataType QueueBack(Queue* pq);
//取队头的元素
QUDataType QueueFront(Queue* pq);
//队列有效元素个数
int QueueSize(Queue* pq);